#ifndef	__light_H__
#define __light_H__

#include "rendVect.hpp"
#include "rendColor.hpp"

namespace rend
{

class Light
{
public:

	Light();

	void			setAmbient(const ColorA& color);
	const ColorA&	getAmbient() const;

	void			setDiffuse(const ColorA& color);
	const ColorA&	getDiffuse() const;

	void			setSpecular(const ColorA& color);
	const ColorA&	getSpecular() const;

	void			setPosition(const vect4& position);
	const vect4&	getPosition() const;

	void			setSpotDirection(const vect3& direction);
	const vect3&	getSpotDirection() const;

	void			setSpotExponent(const float exponent);
	float			getSpotExponent() const;

	void			setSpotCutoff(const float angle);
	float			getSpotCutoff() const;

	void			setAttenuConstant(const float factor);
	float			getAttenuConstant() const;

	void			setAttenuLinear(const float factor);
	float			getAttenuLinear() const;

	void			setAttenuQuadratic(const float factor);
	float			getAttenuQuadratic() const;

private:

	ColorA			mAmbient;
	ColorA			mDiffuse;
	ColorA			mSpecular;
	vect4 			mPosition;
	vect3			mSpotDirection;
	float			mSpotExponent;		// range: [0, 128]
	float			mSpotCutoff;		// range: [0, pi / 2], pi
	float			mAttenuConstant;	// range: [0, +inf)
	float			mAttenuLinear;		// range: [0, +inf)
	float			mAttenuQuadratic;	// range: [0, +inf)
};

} // namespace rend

#endif // __light_H__
